package _17_剑指Offer;

import java.util.Arrays;

public class _56_剑指OfferI数组中数字出现的次数 {

    public static void main(String[] args) {
        _56_剑指OfferI数组中数字出现的次数 v = new _56_剑指OfferI数组中数字出现的次数();
        System.out.println(13 ^ 10);
        int[] ins = {1, 2, 1, 3, 2, 5};
        System.out.println(Arrays.toString(v.singleNumbers(ins)));
    }

    public int[] singleNumbers(int[] nums) {
        // 获取所有数异或的结果
        int ret = nums[0];
        for (int i = 1; i < nums.length; i++) {
            ret ^= nums[i];
        }
        // 随便取得二进制位的
        int target = 1;
        while ((target & ret) == 0) {
            target <<= 1;
        }

        // 进行二进制分组
        int a = 0, b = 0;
        for (int num : nums) {
            if ((target & num) == 0) {
                a ^= num;
            } else {
                b ^= num;
            }
        }
        return new int[]{a, b};
    }

}
